package main

import (
	"io/ioutil"
	"log"
	"os"
	"path/filepath"
	"strings"

	"github.com/inntu/backend/config"
	"github.com/inntu/backend/api/models"
	"gorm.io/gorm"
)

// 文件名映射表
var fileMapping = map[string]string{
	"校园论坛":     "forum",
	"公众号":      "official",
	"校历":       "calendar",
	"校园地图":     "map",
	"天气":       "weather",
	"关于学校":     "school",
	"学校概况":     "about",
	"资助":       "aid",
	"寝室":       "life",
	"快递":       "takeout",
	"洗浴":       "bath",
	"校园网":      "network",
	"交通出行":     "transport",
	"NTU食堂":    "canteen",
	"校园超市":     "market",
	"外卖":       "waimai",
	"互助跑腿":     "helper",
	"课程表":      "schedule",
	"成绩查询":     "grades",
	"艺术学院":     "art",
	"师范学院":     "teacher",
	"管理学院":     "management",
	"理学院":      "science",
	"文学院":      "literature",
	"工学院":      "engineering",
	"学前教育学院":   "preschool",
	"外语学院":     "language",
	"体育学院":     "sports",
	"需带物品":     "items",
	"入学准备":     "preparation",
	"走读":       "commute",
	"学费缴纳":     "tuition",
	"防盗防骗":     "security",
	"转专业":      "transfer",
	"教师资格证":    "certificate",
	"图书馆":      "library",
	"英语a级考试":   "english",
}

func main() {
	// 初始化数据库连接
	dbConfig := config.GetDatabaseConfig()
	err := config.InitGormDatabase(dbConfig)
	if err != nil {
		log.Fatal("初始化数据库失败:", err)
	}
	defer config.CloseGormDatabase()

	db := config.GetGormDB()
	if db == nil {
		log.Fatal("无法连接到数据库")
	}

	// 内容目录路径
	contentDir := "data/content"

	// 获取当前工作目录
	wd, err := os.Getwd()
	if err != nil {
		log.Fatal("获取工作目录失败:", err)
	}

	// 构建完整的内容目录路径
	fullContentDir := filepath.Join(wd, contentDir)
	log.Printf("内容目录: %s", fullContentDir)

	// 读取目录下的所有.md文件
	files, err := ioutil.ReadDir(fullContentDir)
	if err != nil {
		log.Fatal("读取内容目录失败:", err)
	}

	updatedCount := 0
	skippedCount := 0

	// 遍历所有文件
	for _, file := range files {
		if file.IsDir() || !strings.HasSuffix(file.Name(), ".md") {
			continue
		}

		// 获取文件名（不包含扩展名）
		fileName := strings.TrimSuffix(file.Name(), ".md")
		
		// 查找对应的api_endpoint
		apiEndpoint, exists := fileMapping[fileName]
		if !exists {
			log.Printf("跳过文件 %s: 未找到对应的api_endpoint", file.Name())
			skippedCount++
			continue
		}

		// 读取文件内容
		filePath := filepath.Join(fullContentDir, file.Name())
		content, err := ioutil.ReadFile(filePath)
		if err != nil {
			log.Printf("读取文件 %s 失败: %v", file.Name(), err)
			skippedCount++
			continue
		}

		// 查找数据库中对应的item
		var item models.Item
		err = db.Where("api_endpoint = ?", apiEndpoint).First(&item).Error
		if err != nil {
			if err == gorm.ErrRecordNotFound {
				log.Printf("跳过文件 %s: 数据库中未找到api_endpoint为 %s 的记录", file.Name(), apiEndpoint)
			} else {
				log.Printf("查询数据库失败 %s: %v", file.Name(), err)
			}
			skippedCount++
			continue
		}

		// 更新content字段
		contentStr := string(content)
		err = db.Model(&item).Update("content", contentStr).Error
		if err != nil {
			log.Printf("更新数据库失败 %s: %v", file.Name(), err)
			skippedCount++
			continue
		}

		log.Printf("✓ 已更新: %s -> %s (ID: %d)", file.Name(), apiEndpoint, item.ID)
		updatedCount++
	}

	log.Printf("\n=== 更新完成 ===")
	log.Printf("成功更新: %d 个文件", updatedCount)
	log.Printf("跳过文件: %d 个文件", skippedCount)
	log.Printf("总计处理: %d 个文件", updatedCount+skippedCount)
}